package LBLD新算法;

import org.junit.Test;

import java.util.Stack;

import static MyUtils.MHUtils.*;
import static MyUtils.MHMoban.*;

/*
    每个节点只处理自己（单cur思想）
    做完题一定写入表格
*/
public class 单调减栈_遇到一大开始计算_接雨水_42 {
    public int trap(int[] h) {
        Stack<Integer> s = new Stack<>();
        int res=0;
        for (int i = 0; i < h.length; i++) {
            int cur=h[i];
            //有大的开算内部积留的小的
            while(!s.isEmpty() && cur>s.peek()){
                int rI=i;
                int cI=s.peek();
                if(s.isEmpty())break; // 左边没东西挡着，不是容器
                int lI=s.pop();
                res+=(rI-lI-1)*(Math.min(h[lI],h[rI])-h[cI]);
            }
            //压ind，不压值，因为可能中间跳过没算的，我要都算
            s.push(i);
        }
        return res;
    }
}
